<?php

	require_once('Controller.php');
	require_once('model/imageDAO.php');
	/**
	* PhotoMatrix, Affichage de plusieurs photos
	*/
	class PhotoMatrix extends Controller
	{
		protected $imgDAO;
		
		/**
		 * Construction du menu, instanciation de la classe d'accès aux données
		 */
		public function __construct ()
		{
			parent::__construct();
			$this->imgDAO = new ImageDAO();
			$this->data->nbImg = isset($_GET['nbImg']) ? $_GET['nbImg'] : 2;
			$this->data->menu['First'] = '?controller=PhotoMatrix&action=first';
			$this->data->menu['Random'] = '?controller=PhotoMatrix&action=random';
			$this->data->menu['More'] = '?controller=PhotoMatrix&action=more';
			$this->data->menu['Less'] = '?controller=PhotoMatrix&action=less';
		}
		
		/**
		 * Lors de la destruction, construction du menu, appel de la vue correspondante
		 * @see Controller::__destruct()
		 */
		public function __destruct ()
		{
			$this->data->view = 'photoMatrixView.php';
			$this->data->menu['Random'].='&nbImg='.$this->data->nbImg;
			$this->data->menu['First'].= '&nbImg='.$this->data->nbImg;
			if( isset($this->data->images[0]) ) {
				$this->data->menu['More'] .= '&nbImg='.$this->data->nbImg.'&imgId='.$this->data->images[0]->getId();
				$this->data->menu['Less'] .= '&nbImg='.$this->data->nbImg.'&imgId='.$this->data->images[0]->getId();
			}	
			parent::__destruct();
		}
		
		/**
		 * @see PhotoMatrix::first()
		 */
		public function index ()
		{
			$this->first();
		}
		/**
		 * Affichage par défaut : deux images par page en partant de la première
		 */
		public function first ()
		{
			if (isset($_GET['imgId'])) {
				$this->data->images = $this->imgDAO->getImageList($_GET['imgId'], $this->data->nbImg);
			} else {
				$this->data->images = $this->imgDAO->getImageList(1, $this->data->nbImg);
			}
		}
		
		/**
		 * Affiche la page suivante ($_GET['imgID'] + $this->data->nbImg)
		 * Si $_GET['imgId'] n'existe pas, on part de la première
		 */
		public function next ()
		{
			if (!isset($_GET['imgId']))
			{
				$_GET['imgId'] = 1;
			}
			else
			{
				// Si l'id suivant est plus grand que le nombre d'images dans la base de données,
				// On récupère le dernier id moins le nombre d'images par page
				// Sinon, on passe à la page suivante
				if ($_GET['imgId'] + $this->data->nbImg > $this->imgDAO->size() - $this->data->nbImg)
				{
					$_GET['imgId'] = $this->imgDAO->size() - $this->data->nbImg;
				}
				else
				{
					$_GET['imgId'] = $_GET['imgId'] + $this->data->nbImg;
				}
			}
			
			$this->data->images = $this->imgDAO->getImageList($_GET['imgId'], $this->data->nbImg);
		}
		
		/**
		 * Affiche la page précèdente ($_GET['imgId'] - $this->data->nbImg)
		 */
		public function prev ()
		{
			if (!isset($_GET['imgId']))
			{
				$_GET['imgId'] = 1;
			}
			else
			{
				// Si on cherche une image qui est n'est pas dans la base de données
				// On récupère depuis la dernière
				// Sinon on calcule les images de la page précèdente
				if ($_GET['imgId'] > $this->imgDAO->size())
				{
					$_GET['imgId'] = $this->imgDAO->size();
				}
				else
				{
					$_GET['imgId'] = $_GET['imgId'] - $this->data->nbImg;
				}
			}
			
			$this->data->images = $this->imgDAO->getImageList($_GET['imgId'], $this->data->nbImg);
		}
		
		/**
		 * Récupère une page d'image en partant d'une image au hasard
		 */
		public function random ()
		{
			$this->data->images = $this->imgDAO->getImageList(rand(0, $this->imgDAO->size()), $this->data->nbImg);
		}
		
		/**
		 * Affiche la même page d'images mais avec deux fois plus d'images
		 */
		public function more ()
		{
			$this->data->nbImg *= 2;
			$this->data->images = $this->imgDAO->getImageList($_GET['imgId'], $this->data->nbImg);
		}
		
		/**
		 * Affiche la même page d'images mais avec deux fois moins d'image
		 */
		public function less ()
		{
			$this->data->nbImg /= 2;
			// Si le nombre d'image est inférieur à 1, on le remet à 1
			if ($this->data->nbImg < 1)
				$this->data->nbImg = 1;
			$this->data->images = $this->imgDAO->getImageList($_GET['imgId'], $this->data->nbImg);
		}
	
	}
	